// 图片URL获取助手
// 使用云开发的临时URL机制，自动处理签名和过期时间

const { getTempFileURL } = require('./util');
const { images } = require('../config/images');

/**
 * 获取单个图片的临时URL
 * @param {string} cloudPath 云存储文件路径
 * @returns {Promise<string>} 临时URL
 */
const getImageTempUrl = async (cloudPath) => {
  try {
    return await getTempFileURL(cloudPath);
  } catch (error) {
    console.error('获取图片临时URL失败:', error);
    throw error;
  }
};

/**
 * 批量获取图片临时URL
 * @param {string[]} cloudPaths 云存储文件路径数组
 * @returns {Promise<string[]>} 临时URL数组
 */
const getBatchImageTempUrls = async (cloudPaths) => {
  try {
    return await Promise.all(cloudPaths.map(path => getTempFileURL(path)));
  } catch (error) {
    console.error('批量获取图片临时URL失败:', error);
    throw error;
  }
};

/**
 * 获取所有轮播图的临时URL
 * @returns {Promise<string[]>} 轮播图临时URL数组
 */
const getSwiperTempUrls = async () => {
  return await getBatchImageTempUrls(images.swipers);
};

/**
 * 获取功能卡片图片（包含标题和临时URL）
 * @returns {Promise<Array>} 卡片数据数组
 */
const getCardsTempUrls = async () => {
  try {
    const cardsWithTempUrls = await Promise.all(
      images.cards.map(async (card) => ({
        ...card,
        tempUrl: await getTempFileURL(card.image)
      }))
    );
    return cardsWithTempUrls;
  } catch (error) {
    console.error('获取卡片图片临时URL失败:', error);
    throw error;
  }
};

/**
 * 获取指定用户头像的临时URL
 * @param {string} username 用户名 (Sean, Mollymolly, Andrew, Kingdom, Paige)
 * @returns {Promise<string>} 头像临时URL
 */
const getAvatarTempUrl = async (username) => {
  if (!images.avatars[username]) {
    throw new Error(`用户 ${username} 的头像不存在`);
  }
  return await getTempFileURL(images.avatars[username]);
};

/**
 * 获取指定图标的临时URL
 * @param {string} iconName 图标名称
 * @returns {Promise<string>} 图标临时URL
 */
const getIconTempUrl = async (iconName) => {
  if (!images.icons[iconName]) {
    throw new Error(`图标 ${iconName} 不存在`);
  }
  return await getTempFileURL(images.icons[iconName]);
};

module.exports = {
  getImageTempUrl,
  getBatchImageTempUrls,
  getSwiperTempUrls,
  getCardsTempUrls,
  getAvatarTempUrl,
  getIconTempUrl,
}; 